using System;
using System.Collections;
using System.Collections.Generic;
using Newtonsoft.Json;

using MarketPlace.Data.Bases;

namespace MarketPlace.Data.DomainModels
{
    [JsonObject(MemberSerialization.OptIn)]
    public partial class User : BusinessBase<int>
    {
        #region Declarations

		private string _userName = String.Empty;
		private string _email = String.Empty;
		private string _comment = null;
		private bool _enabled = default(Boolean);
		private System.DateTime _dateCreated = new DateTime();
		private System.DateTime? _dateLastLogin = null;
		private System.DateTime? _dateLastActivity = null;
		private decimal _balance = default(Decimal);
		private decimal _payGet = default(Decimal);
		private decimal _payOut = default(Decimal);
		private decimal _incoming = default(Decimal);
		
		
		
		#endregion

        #region Constructors

        public User() { }

        #endregion

        #region Methods

        public override int GetHashCode()
        {
            System.Text.StringBuilder sb = new System.Text.StringBuilder();
            
            sb.Append(this.GetType().FullName);
			sb.Append(_userName);
			sb.Append(_email);
			sb.Append(_comment);
			sb.Append(_enabled);
			sb.Append(_dateCreated);
			sb.Append(_dateLastLogin);
			sb.Append(_dateLastActivity);
			sb.Append(_balance);
			sb.Append(_payGet);
			sb.Append(_payOut);
			sb.Append(_incoming);

            return sb.ToString().GetHashCode();
        }

        #endregion

        #region Properties

        [JsonProperty]
		public virtual string UserName
        {
            get { return _userName; }
			set
			{
				OnUserNameChanging();
				_userName = value;
				OnUserNameChanged();
			}
        }
		partial void OnUserNameChanging();
		partial void OnUserNameChanged();
		
        [JsonProperty]
		public virtual string Email
        {
            get { return _email; }
			set
			{
				OnEmailChanging();
				_email = value;
				OnEmailChanged();
			}
        }
		partial void OnEmailChanging();
		partial void OnEmailChanged();
		
        [JsonProperty]
		public virtual string Comment
        {
            get { return _comment; }
			set
			{
				OnCommentChanging();
				_comment = value;
				OnCommentChanged();
			}
        }
		partial void OnCommentChanging();
		partial void OnCommentChanged();
		
        [JsonProperty]
		public virtual bool Enabled
        {
            get { return _enabled; }
			set
			{
				OnEnabledChanging();
				_enabled = value;
				OnEnabledChanged();
			}
        }
		partial void OnEnabledChanging();
		partial void OnEnabledChanged();
		
        [JsonProperty]
		public virtual System.DateTime DateCreated
        {
            get { return _dateCreated; }
			set
			{
				OnDateCreatedChanging();
				_dateCreated = value;
				OnDateCreatedChanged();
			}
        }
		partial void OnDateCreatedChanging();
		partial void OnDateCreatedChanged();
		
        [JsonProperty]
		public virtual System.DateTime? DateLastLogin
        {
            get { return _dateLastLogin; }
			set
			{
				OnDateLastLoginChanging();
				_dateLastLogin = value;
				OnDateLastLoginChanged();
			}
        }
		partial void OnDateLastLoginChanging();
		partial void OnDateLastLoginChanged();
		
        [JsonProperty]
		public virtual System.DateTime? DateLastActivity
        {
            get { return _dateLastActivity; }
			set
			{
				OnDateLastActivityChanging();
				_dateLastActivity = value;
				OnDateLastActivityChanged();
			}
        }
		partial void OnDateLastActivityChanging();
		partial void OnDateLastActivityChanged();
		
        [JsonProperty]
		public virtual decimal Balance
        {
            get { return _balance; }
			set
			{
				OnBalanceChanging();
				_balance = value;
				OnBalanceChanged();
			}
        }
		partial void OnBalanceChanging();
		partial void OnBalanceChanged();
		
        [JsonProperty]
		public virtual decimal PayGet
        {
            get { return _payGet; }
			set
			{
				OnPayGetChanging();
				_payGet = value;
				OnPayGetChanged();
			}
        }
		partial void OnPayGetChanging();
		partial void OnPayGetChanged();
		
        [JsonProperty]
		public virtual decimal PayOut
        {
            get { return _payOut; }
			set
			{
				OnPayOutChanging();
				_payOut = value;
				OnPayOutChanged();
			}
        }
		partial void OnPayOutChanging();
		partial void OnPayOutChanged();
		
        [JsonProperty]
		public virtual decimal Incoming
        {
            get { return _incoming; }
			set
			{
				OnIncomingChanging();
				_incoming = value;
				OnIncomingChanged();
			}
        }
		partial void OnIncomingChanging();
		partial void OnIncomingChanged();
		
        #endregion
    }
}
